package com.jlkf.service.util;
import java.io.File;
import java.security.Security;
import java.util.Locale;
import java.util.Properties;
import java.util.ResourceBundle;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.Message.RecipientType;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

import com.jlkf.common.Constant;
public  class SendmailUtil {
	 /**
	  * 冯氏发件箱  
	  * Email: FungOmniApp@fireswirlsz.com
	    Pwd: 3xm-RGS-KTU-kAM
	  */
	static ResourceBundle rbs = ResourceBundle.getBundle("config/mail", Locale.CHINA);
	//收件人邮箱服务器地址
//	private static String mail= "smtp.jlkfapp.com";
	private static String mail= rbs.getString("mail");
	//发件人
//	private static String  the_sender="mi.qin@jlkfapp.com";
	private static String  the_sender=rbs.getString("the_sender");
	//发件人邮箱密码
//	private static String password="898989asdF";
	private static String password=rbs.getString("password");
	//收件人邮箱
//	private static String the_recipient="miqin_1993@163.com";
	
	/**
	 * @throws MessagingException 
	 * @throws AddressException 
	 * @方法名: sendEmail  
	 * @功能描述: 发送邮件
	 * @作者  
	 * @title  标题
	 * @日期 Dec 5, 2016
	 */
	public static void  sendEmail(String title,String content,String the_recipient) throws AddressException, MessagingException{
		 //设置SSL连接、邮件环境
//        Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());  
        final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";  
		/**
		 * 1、通过session创建邮件的配置信息
			2、创建代表邮件内容的Message对象（JavaMail创建的邮件是基于MIME协议的）
			3、创建Transport对象、连接服务器、发送Message、关闭连接
		 */
		Properties props = new Properties();
		// 配置项参考文档
		// 邮件服务器的地址
		props.setProperty("mail.host", mail);
		props.setProperty("mail.transport.protocol", "smtp");
		// 开启认证
//		props.setProperty("mail.smtp.auth", "false");
		props.setProperty("mail.smtp.auth", "true");
		//linux必须要加这个
		props.setProperty("mail.smtp.ssl.enable", "true");
		 props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
         props.setProperty("mail.smtp.socketFactory.fallback", "false");
         props.setProperty("mail.smtp.port", "465");
         props.setProperty("mail.smtp.socketFactory.port", "465");
		Session session = Session.getInstance(props);
		// 调试完毕后，注释调
//		session.setDebug(false);
		
		/**
		 * 2、创建代表邮件内容的Message对象（JavaMail创建的邮件是基于MIME协议的）
		 */
		MimeMessage message = new MimeMessage(session);
		// 发件人
		message.setFrom(new InternetAddress(the_sender));
		// 设置主题
		message.setSubject(title);
		// 设置收件人
		message.setRecipient(RecipientType.TO, new InternetAddress(the_recipient));
		// 设置正文
		// 纯文本的邮件
		//message.setText("2016年12月5日 09:30:53，这是本次的报表");
		System.out.println("邮箱内容："+content);
		// html格式的邮件
		message.setContent(content, "text/html;charset=UTF-8");
		/**
		 * 3、创建Transport对象、连接服务器、发送Message、关闭连接
		 */
		Transport tran = session.getTransport();
		tran.connect(mail, the_sender, password);
		tran.sendMessage(message, message.getAllRecipients());
		// 关闭连接
		tran.close();
		
	}
	//发送文本 与附件
	public static void sendEmail2(String title,String content,String filePath,String the_recipient) throws AddressException, MessagingException{
		/**
		 * 1、通过session创建邮件的配置信息
			2、创建代表邮件内容的Message对象（JavaMail创建的邮件是基于MIME协议的）
			3、创建Transport对象、连接服务器、发送Message、关闭连接
		 */
		Properties props = new Properties();
		// 配置项参考文档
		// 邮件服务器的地址
		props.setProperty("mail.host", mail);
		props.setProperty("mail.transport.protocol", "smtp");
		// 开启认证
		props.setProperty("mail.smtp.auth", "false");
		//linux必须要加这个
		props.setProperty("mail.smtp.ssl.enable", "false");
		Session session = Session.getInstance(props);
		// 调试完毕后，注释调
		session.setDebug(true);
		
		/**
		 * 2、创建代表邮件内容的Message对象（JavaMail创建的邮件是基于MIME协议的）
		 */
		MimeMessage message = new MimeMessage(session);
		// 发件人
		message.setFrom(new InternetAddress(the_sender));
		// 设置主题
		message.setSubject("中樱出行订单");
		// 设置收件人
		message.setRecipient(RecipientType.TO, new InternetAddress(the_recipient));
		
		// 设置正文
		// 类似于springMVC的文件上传
		// 包含文本和附件
		MimeMultipart mulpart = new MimeMultipart();
		MimeBodyPart bodyPart = new MimeBodyPart();
		// 第一部分、邮件的正文
		bodyPart.setText(content);
		mulpart.addBodyPart(bodyPart);
		
		// 第二部分、附件
		bodyPart = new MimeBodyPart();
		//D:\\mq\\新建文件夹\\新建文本文档.txt
		File f=new File(filePath);
		System.out.println("邮件发送订单路径："+filePath);
		// 引入文件的数据源
		bodyPart.setDataHandler(new DataHandler(new FileDataSource(f)));
		// 定义文件的名称
		bodyPart.setFileName("order.xls");
		mulpart.addBodyPart(bodyPart);
		
		// 放入MimeMultipart对象
		message.setContent(mulpart);
		
		/**
		 * 3、创建Transport对象、连接服务器、发送Message、关闭连接
		 */
		Transport tran = session.getTransport();
		tran.connect(mail, the_sender, password);
		tran.sendMessage(message, message.getAllRecipients());
		
		// 关闭连接
		tran.close();
		// 关闭流
        if (tran != null) {
        	tran.close();
        }
		f.delete();
	}
	public static void main(String[] args) {
		
		try {
//			SendmailUtil.sendEmail("冯氏激活","【冯氏】请点击该路径激活账户为：http://"+Constant.SERVER_NAME+":8810//fs_oa//member//activateTheAccount?memberId=8fmZJ7FwW7cg35NhLogZEw==，初始密码为:3,千万不要告诉别人哦。" , "miqin_1993@163.com");
			SendmailUtil.sendEmail("Y2333333","<p>Date: 25 October 2017 at 19:45  </p><p> <img src='http://47.52.72.90:8080//file//fs//512356575597564762.jpeg' ></img></p>" , "15118161620@163.com");
		} catch (AddressException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (MessagingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		/*try {
//			sendEmail2("测试","测试");
		} catch (AddressException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (MessagingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}*/
	}
	
	
}
             


